Don't create render nodes for empty backgrounds
authorMatthias Clasen <mclasen@redhat.com>
Fri, 12 Aug 2016 22:23:25 +0000 (18:23 -0400)
committerEmmanuele Bassi <ebassi@gnome.org>
Tue, 18 Oct 2016 10:49:14 +0000 (11:49 +0100)
gtk/gtkrenderbackground.c

index b87724537f7dc326489f0f30cba23d0e392c501c..1189e4c9ac57aada835d0acfce03d575faffbbc9 100644 (file)
@@ -442,6 +442,20 @@ gtk_css_style_add_background_render_nodes (GtkCssStyle      *style,
 {
   GskRenderNode *bg_node;
   cairo_t *cr;
+  GtkCssValue *background_image;
+  GtkCssValue *box_shadow;
+  const GdkRGBA *bg_color;
+
+  background_image = gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BACKGROUND_IMAGE);
+  bg_color = _gtk_css_rgba_value_get_rgba (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BACKGROUND_COLOR));
+  box_shadow = gtk_css_style_get_value (style, GTK_CSS_PROPERTY_BOX_SHADOW);
+
+  /* This is the common default case of no background */
+  if (gtk_rgba_is_clear (bg_color) &&
+      _gtk_css_array_value_get_n_values (background_image) == 1 &&
+      _gtk_css_image_value_get_image (_gtk_css_array_value_get_nth (background_image, 0)) == NULL &&
+      _gtk_css_shadows_value_is_none (box_shadow))
+    return;
 
   bg_node = gsk_renderer_create_render_node (renderer);
   gsk_render_node_set_name (bg_node, name);